// fs.c – Определяет интерфейс и структуры, связанные с виртуальной файловой системой.
#include <fs.h>

fs_node_t *fs_root = 0;			// The root of the filesystem.

uint32 read_fs(fs_node_t *node, uint32 offset, uint32 size, uint8 *buffer)
{
    // Получил ли нод обратный вызов функции чтения?
    if (node->read != 0)
        return node->read(node, offset, size, buffer);
    else
        return 0;
}

uint32 write_fs(fs_node_t *node, uint32 offset, uint32 size, uint8 *buffer)
{
    // Получил ли нод обратный вызов функции записи?
    if (node->write != 0)
        return node->write(node, offset, size, buffer);
    else
        return 0;
}

void open_fs(fs_node_t *node, uint8 read, uint8 write)
{
    // Получил ли нод обратный вызов функции открытия?
    if (node->open != 0)
        return node->open(node);
}

void close_fs(fs_node_t *node)
{
    // Получил ли нод обратный вызов функции закрытия?
    if (node->close != 0)
        return node->close(node);
}

struct dirent *readdir_fs(fs_node_t *node, uint32 index)
{
    // Получил ли нод обратный вызов функции чтения и директория ли это?
    if ( (node->flags&0x7) == FS_DIRECTORY && node->readdir != 0)
        return node->readdir(node, index);
    else
        return 0;
}

fs_node_t *finddir_fs(fs_node_t *node, char *name)
{
    // Is the node a directory, and does it have a callback?
    if ((node->flags&0x7) == FS_DIRECTORY && node->finddir != 0 )
        return node->finddir(node, name);
    else
        return 0;
}
